package cn.jsj.dao;

import java.util.LinkedList;
import java.util.List;
import java.util.ListIterator;

import cn.jsj.pojo.TblWageManage;

/**
 * 工资表处理类
 * @author LI
 *
 */
public class TblWageManageDAO  {
	/**
	 * 获得工资信息条数
	 * @return：工资信息总条数
	 */
	public int getWageInfoNumb(){
		// 取得session对象
		org.hibernate.Session session = HBUtils.getSession();
		// 新建事务对象
		org.hibernate.Transaction tx = session.beginTransaction();
		// 开始事务
		tx.begin();
		String hql="select count(*) from TblWageManage";
	    List result=session.createQuery(hql)
		.list();
		// 提交事务
		tx.commit();
		session.close();
		//获得结果的迭代器
		 ListIterator iterator = result.listIterator();
		 Long rows =(Long)iterator.next();
		 return Integer.parseInt(rows.toString());
	}

	/**
	 * 获得某个页面的工资信息
	 * @param startNumb：从第几条开始
	 * @param totalNumb：总共几条
	 * @return：工资信息队列
	 */
	public java.util.List<TblWageManage> getWageInfo(int startNumb,int totalNumb){
		// 取得session对象
		org.hibernate.Session session = HBUtils.getSession();
		// 新建事务对象
		org.hibernate.Transaction tx = session.beginTransaction();
		// 开始事务
		tx.begin();
		List result=session.createCriteria(TblWageManage.class)
		.addOrder(org.hibernate.criterion.Order.desc("wageTime"))
		.setFirstResult(startNumb)
		.setMaxResults(totalNumb)
		.list();
		// 提交事务
		tx.commit();
		session.close();
		return result;
	}

	/**
	 * 获得符合条件的工资信息条数
	 * @param swip：条件参数对象
	 * @return：工资信息条数
	 */
	public int getSearWageInfoNumb(cn.jsj.bgtodb.SearchWageInfoProperty swip){
		// 取得session对象
		org.hibernate.Session session = HBUtils.getSession();
		// 新建事务对象
		org.hibernate.Transaction tx = session.beginTransaction();
		// 开始事务
		tx.begin();
		//结果队列
		List result=new LinkedList();
		//判断输入的是哪个条件
		//输入的律师助理姓名为null
		if(swip.getLawyerAssiName().length()==0){
		String hql="select count(*) from TblWageManage twm where twm.enterWagePer=?";
	    result=session.createQuery(hql)
	    .setString(0, swip.getEnterWagePer())
		.list();
		}
		//如果输入的入资者为NULL
		if(swip.getEnterWagePer().length()==0){
			String hql="select count(*) from TblWageManage twm where twm.lawyAssistantId=?";
		    result=session.createQuery(hql)
		    .setInteger(0, Integer.parseInt(swip.getLawyerAssiName()))
			.list();
		}
		//获得结果的迭代器
		ListIterator iterator = result.listIterator();
		Long rows =(Long)iterator.next();
		// 提交事务
		tx.commit();
		session.close();
		return Integer.parseInt(rows.toString());
	}


	/**
	 * 获得符合条件的工资信息
	 * @param swip：条件参数对象
	 * @return：工资信息队列
	 */
	public java.util.List<TblWageManage> getSearWageInfo(cn.jsj.bgtodb.SearchWageInfoProperty swip){
		// 取得session对象
		org.hibernate.Session session = HBUtils.getSession();
		// 新建事务对象
		org.hibernate.Transaction tx = session.beginTransaction();
		// 开始事务
		tx.begin();
		//结果队列
		List result=new LinkedList();
		//判断输入的是哪个条件
		//输入的律师助理姓名为null
		if(swip.getLawyerAssiName().length()==0){
			result=session.createCriteria(TblWageManage.class)
			.add(org.hibernate.criterion.Restrictions.eq("enterWagePer", swip.getEnterWagePer()))
			.addOrder(org.hibernate.criterion.Order.desc("wageTime"))
			.setFirstResult(swip.getStartNumb())
			.setMaxResults(swip.getTotalNumb())
			.list();
		}
		//如果输入的入资者为NULL
		if(swip.getEnterWagePer().length()==0){
			result=session.createCriteria(TblWageManage.class)
			.add(org.hibernate.criterion.Restrictions.eq("lawyAssistantId", Integer.parseInt(swip.getLawyerAssiName())))
			.addOrder(org.hibernate.criterion.Order.desc("wageTime"))
			.setFirstResult(swip.getStartNumb())
			.setMaxResults(swip.getTotalNumb())
			.list();
		}
		// 提交事务
		tx.commit();
		session.close();
		return result;
	}


	/**
	 * 保存工资记录
	 * @param twm：工资记录对象
	 * @return：1：保存成功
	 */
	public int saveWageInfo(cn.jsj.pojo.TblWageManage twm){
		// 取得session对象
		org.hibernate.Session session = HBUtils.getSession();
		// 新建事务对象
		org.hibernate.Transaction tx = session.beginTransaction();
		// 开始事务
		tx.begin();
		session.save(twm);
		// 提交事务
		tx.commit();
		session.close();
		return 1;
	}

	/**
	 * 查看律师助理工资余额
	 * @param lawyerAssId：律师助理ID
	 * @return：工资余额
	 */
	public int getWageLeft(int lawyerAssId){
		// 取得session对象
		org.hibernate.Session session = HBUtils.getSession();
		// 新建事务对象
		org.hibernate.Transaction tx = session.beginTransaction();
		// 开始事务
		tx.begin();
		String hql="select sum(twm.wageIncome),sum(twm.wagePayout) from TblWageManage twm where twm.lawyAssistantId=?";
		List result=session.createQuery(hql)
		    .setInteger(0, lawyerAssId)
			.list();
		// 提交事务
		tx.commit();
		session.close();
		//获得结果的迭代器
		 ListIterator iterator = result.listIterator();
		    Object[] rows = (Object[]) iterator.next();

		    int income=Integer.parseInt(rows[0].toString());
		    int payout=Integer.parseInt(rows[1].toString());

		    //求出工资余额
		     int wageLeft=income-payout;
		return wageLeft;
	}

	/**
	 * 更新工资记录
	 * @param twm：工资记录对象
	 * @return：1：更新成功
	 */
	public int updateWageInfo(cn.jsj.pojo.TblWageManage twm){
		// 取得session对象
		org.hibernate.Session session = HBUtils.getSession();
		// 新建事务对象
		org.hibernate.Transaction tx = session.beginTransaction();
		// 开始事务
		tx.begin();
		session.update(twm);
		// 提交事务
		tx.commit();
		session.close();
		return 1;
	}

}